#coding:utf8
from rest_framework import serializers
from django_redis import get_redis_connection
# ModelSerializer
# Serializer

# 因为ModelSerializer 需要关联模型
class RegisterSMSCodeSerializer(serializers.Serializer):
    #required	表明该字段在反序列化时必须输入，默认True
    text = serializers.CharField(label='图片验证码',max_length=4,min_length=4)
    image_code_id = serializers.UUIDField(label='uuid')


    # 序列化器校验 有 4中方式
    # UUIDField 字段类型
    # max_length=4 选项
    # 单个字段 validate_filename
    # 多个字段

    def validate(self, attrs):

        # 1. 获取用户提交的验证码
        text = attrs.get('text')
        image_code_id = attrs.get('image_code_id')
        # 2. 获取redis的验证码
        redis_conn = get_redis_connection('code')

        redis_text = redis_conn.get('img_%s'%image_code_id)
        # 2.1 判断是否存在
        if redis_text is None:
            raise serializers.ValidationError('验证码以过期')
        # 2.2 删除
        redis_conn.delete('img_%s'%image_code_id)

        # 3. 比较
        # 注意点: redis的数据是bytes类型
        #   转换为小写 lower()
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError('输入不一致')

        return attrs
